//
// Created by Flower_LC on 2022/10/16.
//
#include<stdio.h>
#include<string.h>

//#define DEBUG // 打印调试信息

char codes[8][256]; // (len, value), len编码长度, value为值

int readChar(){
    while(true){
        char ch = getchar();
        if(ch != '\n' && ch != '\r') return ch;
    }
} // 跳过换行读取字符, 免去其他函数读取时都要做判断换行符的操作

int readHeader(){
    memset(codes, 0, sizeof(codes));
    codes[1][0] = readChar();
    for(int i = 2; i < 8; ++i){
        for(int j = 0; j < (1<<i) - 1; j++){
            char ch = getchar();
            if(ch == EOF) return 0;
            if(ch == '\n' || ch == '\r') return 1;
            codes[i][j] = ch;
        }
    }
} // 读取一行Header到codes内

int readMessageInt(int n){
    int result = 0;
    while(n--){
        result = 2 * result + (readChar() - '0');
    }
    return result;
} // 读取信息串, 返回整形数字

void printCodes(){
    printf("\nCodes=\n%c\n", codes[1][0]);
    for(int i = 2; i < 8; ++i){
        for(int j = 0; j < (1<<i) - 1; j++){
        printf("%c", codes[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}

int main(){
    while(readHeader()){
#ifdef DEBUG
        printCodes();
#endif
        while(true){
            int len = readMessageInt(3); // 获取编码长度
#ifdef DEBUG
            printf("len=%d\n", len);
#endif
            if(len == 0){
                printf("\n");
                break;
            } // 一个编码文本的结尾标志
            while(true){
                int id = readMessageInt(len);
                if(id == ((1<<len) - 1)) break; // 编码文本小节的结尾标志
#ifdef DEBUG
                printf("id=%d\n", id);
#endif
#ifndef DEBUG
            printf("%c", codes[len][id]);
#endif
            }
        }
    }
    return 0;
}